﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

//本题要求实现一个函数，求给定的N个整数的和。

//int Sum(int List[], int N)
//{
//	int sum = 0;
//	for (int i = 0; i < N; i++)
//	{
//		sum += List[i];
//	}
//	return sum;
//}

//本题要求实现判断给定整数奇偶性的函数。

//int even(int n)
//{
//	if (n % 2 == 0)
//		return 1;
//	else
//		return 0;
//}

//本题要求对两个整数a和b，输出其中较大的数。
//其中a和b是用户传入的参数，函数返回的是两者中较大的数。

//int max(int a, int b)
//{
//	if (a > b)
//		return a;
//	else
//		return b;
//}

//水仙花数是指一个N位正整数（N≥3），它的每个位上的数字的N次幂之和等于它本身。例如：153 = 1^3+ 5^3+ 3^3
//本题要求编写两个函数，一个判断给定整数是否水仙花数，另一个按从小到大的顺序打印出给定区间(m, n)内所有的水仙花数。
//
//函数接口定义：
//int narcissistic(int number);
//void PrintN(int m, int n);
//函数narcissistic判断number是否为水仙花数，是则返回1，否则返回0。
//
//函数PrintN则打印开区间(m, n)内所有的水仙花数，每个数字占一行。题目保证100≤m≤n≤10000。

#include<math.h>
//int narcissistic(int number)
//{
//	int a = number;
//	int sum = 0;
//	int n = 0;
//	while (a)
//	{
//		a /= 10;
//		n++;
//	}
//	a = number;
//	for (int i = 0; i < n; i++)
//	{
//		sum += pow((number % 10), n);
//		number /= 10;
//	}
//	if (sum == a)
//		return 1;
//	else
//		return 0;
//}
//void PrintN(int m, int n)
//{
//	for (int i = m+1; i < n; i++)
//	{
//		if (narcissistic(i) == 1)
//			printf("%d\n", i);
//	}
//}
//
//int main()
//{
//	int m, n;
//
//	scanf("%d %d", &m, &n);
//	if (narcissistic(m)) printf("%d is a narcissistic number\n", m);
//	PrintN(m, n);
//	if (narcissistic(n)) printf("%d is a narcissistic number\n", n);
//
//	return 0;
//}

//本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下：
//
//f(n) = f(n−2) + f(n−1) (n≥2)，其中f(0) = 0，f(1) = 1。
//
//函数接口定义：
//int f(int n);
//函数f应返回第n个Fabonacci数。题目保证输入输出在长整型范围内。建议用递归实现。

//int f(int n)
//{
//	if (n <= 2 && n > 0)
//		return 1;
//	else if (n == 0)
//		return 0;
//	else
//		return f(n - 1) + f(n - 2);
//}
//本题要求实现下列函数P(n, x)的计算，其函数定义如下：
//P(n, x) = 1  (n = 0);
//P(n, x) = x  (n = 1);
//P(n, x) = ((2*n - 1) * P(n - 1, x) - (n - 1) * p(n - 2, x)) / n   (n > 1);
//
//函数接口定义：
//double P(int n, double x);
//其中n是用户传入的非负整数，x是双精度浮点数。函数P返回P(n, x)函数的相应值。题目保证输入输出都在双精度范围内。

//double P(int n, double x)
//{
//	if (n == 0)
//		return 1;
//	else if (n == 1)
//		return x;
//	else
//		return (((2 * n - 1) * P(n - 1, x) - (n - 1) * P(n - 2, x)) / n);
//}
//
//
//
//int main()
//{
//    int n;
//    double x;
//
//    scanf("%d %lf", &n, &x);
//    printf("%.2f\n", P(n, x));
//
//    return 0;
//}

/*本题要求实现两个函数：一个函数判断给定正整数的各位数字之和是否等于5；另一个函数统计给定区间内有多少个满足上述要求的整数，并计算这些整数的和。

函数接口定义：
int is( int number );
void count_sum( int a, int b );
函数is判断number的各位数字之和是否等于5，是则返回1，否则返回0。

函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求（即令is返回1）的整数，并计算这些整数的和。最后按照格式

count = 满足条件的整数个数, sum = 这些整数的和
进行输出。题目保证0<a≤b≤10000。*/



//int is(int number)
//{
//    int sum = 0;
//    while (number)
//    {
//        sum+=number % 10;
//        number /= 10;
//    }
//    if (sum == 5)
//        return 1;
//    else
//        return 0;
//}
//void count_sum(int a, int b)
//{
//    int sum = 0;
//    int count = 0;
//    for (int i = a; i <= b; i++)
//    {
//        if (is(i))
//        {
//            sum += i;
//            count++;
//        }
//    }
//    printf("count = %d, sum = %d", count, sum);
//}
//
//int main()
//{
//    int a, b;
//
//    scanf("%d %d", &a, &b);
//    if (is(a)) printf("%d is counted.\n", a);
//    if (is(b)) printf("%d is counted.\n", b);
//    count_sum(a, b);
//
//    return 0;
//}

/*本题要求实现一个字符串逆序的简单函数。

函数接口定义：
void f( char *p );
函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组，不能调用任何字符串处理函数。*/

//void f(char* p)
//{
//	int sz = strlen(p);
//
//	for (int i = 0; i < sz / 2; i++)
//	{
//		char tmp = p[i];
//		p[i] = p[sz - 1 - i];
//		p[sz - 1 - i] = tmp;
//	}
//}